<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="../src/css/default.css" />
    <title>运算符</title>
  </head>

  <body>
    <script src="./js/index.js"></script>

    <!-- 
        常用运算符：
            (1) 数学运算符:
                    + 加法 也是字符串拼接

                    纯数学运算符：左右两边必须是数值；否则就是NaN；
                        - * / %  减 乘 除 取余；

                    ES6 的幂运算符：2 ** 2  也就是2的平方；

                    数学运算的优先级：
                        先乘除 再加减 有括号先算括号内的；

            (2) , . 运算符：
                逗号也是个运算符，作为分隔符，分隔函数参数、对象属性、数组项目...
                其参与的表达式，返回什么？
                A,B,C  ABC依次执行，然后返回C；

                其意义就在于 可以以表达式的方式 去执行多条语句；

                点运算符 小数点 或者表示 '的'； 对象的属性、方法的访问符；

            (3) 逻辑运算符 和 位运算符：
                
                逻辑与 &&： A && B 字面上理解为 A B都为真，整个条件才为真；
                实际上： A为真 则返回B； A为假，则返回A；

                位与： &： A & B 将A和B转化为二进制 然后按位加和 只有两个条件同时为真 才为真；

                逻辑或： ||: A || B； A为真，则返回A； A为假，则返回B；
                位或： |： A | B  只要有一个为真 就为真；

                常用场景： 用于初始化某些个值:
                    foo(x){return x || 0}; foo(1) ==> 1; foo() ==> 0;

                    es6中默认参数赋值：foo(x = 0){return x};

                两种运算符是有本质区别的，在js中，尽量去使用逻辑运算符；

                逻辑非：! 就是否定！ 这个运算符能强制进行布尔值转换；
                比如 !(![]) === true

            (4) 三目运算符：
                表达式中的 if...else；
                A ? B : C  

                相当于： if(A) B else C 只不过 if...else没有返回值；

                A为真，就返回B，否则返回C；

                B和C只能是表达式 不能用分号分隔，
                如果想强行写多个语句呢？ 使用逗号...但是不建议这么玩...写出来很难看

                将 A && B 和 A || B 改成三目运算符：

                A ? B : A,  A ? A : B

            
     -->
  </body>
</html>
